home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1996 #14 / Monster Media No. 14 (April 1996) (Monster Media, Inc.).ISO / prog_bas / svgapv24.zip / SVGAMOD1.BAS < prev    next >
BASIC Source File  |  1996-01-30  |  46KB  |  1,410 lines

  1. '****************************************************************************
  2. '*
  3. '*      'SVGAQB' & 'SVGAPV' A Super VGA Graphics Librarys for use with
  4. '*      MS QuickBASIC 4.X and MS PDS/VBDOS
  5. '*      Copyright 1993-1996 by Stephen L. Balkum and Daniel A. Sill
  6. '*
  7. '*      MS, QuickBASIC, PDS, and VBDOS are registered trademarks of
  8. '*      Microsoft Corporation.
  9. '*
  10. '*    **************** UNREGISTERED SHAREWARE VERSION **********************
  11. '*    * FOR EVALUATION ONLY. NOT FOR RESALE IN ANY FORM. SOFTWARE WRITTEN  *
  12. '*    * USING THIS UNREGISTERED SHAREWARE GRAPHICS LIBRARY MAY NOT BY SOLD *
  13. '*    * OR USED FOR ANY PURPOSE OTHER THAN THE EVALUATION OF THIS LIBRARY. *
  14. '*    **********************************************************************
  15. '*
  16. '*    **************** NO WARRANTIES AND NO LIABILITY **********************
  17. '*    * Stephen L. Balkum and Daniel A. Sill provide no warranties, either *
  18. '*    * expressed or implied, of merchant ability, or fitness, for a       *
  19. '*    * particular use or purpose of this SOFTWARE and documentation.      *
  20. '*    * In no event shall Stephen L. Balkum or Daniel A. Sill be held      *
  21. '*    * liable for any damages resulting from the use or misuse of the     *
  22. '*    * SOFTWARE and documentation.                                        *
  23. '*    **********************************************************************
  24. '*
  25. '*    ************** U.S. GOVERNMENT RESTRICTED RIGHTS *********************
  26. '*    * Use, duplication, or disclosure of the SOFTWARE and documentation  *
  27. '*    * by the U.S. Government is subject to the restrictions as set forth *
  28. '*    * in subparagraph (c)(1)(ii) of the Rights in Technical Data and     *
  29. '*    * Computer Software clause at DFARS 252.227-7013.                    *
  30. '*    * Contractor/manufacturer is Stephen L. Balkum and Daniel A. Sill,   *
  31. '*    * P.O. Box 7704, Austin, Texas 78713-7704                            *
  32. '*    **********************************************************************
  33. '*
  34. '*    **********************************************************************
  35. '*    * By using this SOFTWARE or documentation, you agree to the above    *
  36. '*    * terms and conditions.                                              *
  37. '*    **********************************************************************
  38. '*
  39. '****************************************************************************
  40.  
  41.  
  42.     REM $INCLUDE: 'SVGABC.BI'
  43.     REM $INCLUDE: 'SVGADEMO.BI'
  44.     REM $DYNAMIC
  45.     DEFINT A-Z
  46.  
  47.     SUB DOBLOCK (RET$)
  48.     REM $DYNAMIC
  49.     DEFINT A-Z
  50.     MYPI! = ATN(1) * 4
  51.  
  52.     '*************************************************************************
  53.     '* SET UP THE TITLE
  54.     '*************************************************************************
  55.     TITLE$ = "DEMO 5: Block functions and Sprites"
  56.     PALSET PAL, 0, 255
  57.  
  58.     '*************************************************************************
  59.     '* SHOW BLOCK GET (DRAW SOME CIRCLES AND "GET A CHUNK OF THEM")
  60.     '*************************************************************************
  61.     FILLSCREEN 0
  62.     SETVIEW 0, 0, GETMAXX, GETMAXY
  63.     DRWSTRING 1, 7, 0, TITLE$, 10, 0
  64.     A$ = "BLKGET (X1,Y1,X2,Y2,GfxBlock)"
  65.     DRWSTRING 1, 7, 0, A$, 10, 16
  66.     Colr = 16
  67.     FOR I = 0 TO GETMAXX \ 2
  68.         DRWCIRCLE 1, Colr, GETMAXX \ 4 + I, GETMAXY \ 2, GETMAXY \ 5
  69.         Colr = Colr + 4
  70.         IF Colr > 255 THEN
  71.             Colr = 16
  72.         END IF
  73.     NEXT I
  74.     XINC = GETMAXX \ 20
  75.     YINC = GETMAXY \ 20
  76.     X1 = GETMAXX \ 2 - XINC
  77.     Y1 = GETMAXY \ 2 - YINC
  78.     X2 = GETMAXX \ 2 + XINC
  79.     Y2 = GETMAXY \ 2 + YINC
  80.     DRWBOX 1, 0, X1, Y1, X2, Y2
  81.     BLKSIZE1 = (((X2 - X1 + 1) * (Y2 - Y1 + 1)) / 2) + 3
  82.     REDIM GFXBLK1(0 TO BLKSIZE1) AS INTEGER
  83.     BLKGET X1, Y1, X2, Y2, GFXBLK1(0)
  84.     GETKEY RET$
  85.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  86.         FILLSCREEN 0
  87.         EXIT SUB
  88.     END IF
  89.  
  90.     '*************************************************************************
  91.     '* SHOW BLOCK ROTATE AND SPRITE STUFF
  92.     '*************************************************************************
  93.     X = (X2 - X1) \ 2 + X1
  94.     Y = (Y2 - Y1) \ 2 + Y1
  95.     A$ = "BLKROTATE (Angle,BackFill,SourceGfxBlock,DestGfxBlock)   "
  96.     DRWSTRING 1, 7, 0, A$, 10, 16
  97.     A$ = "SPRITEGAP(TranSColr,X,Y,SpriteArray,BackGroundGfxBlock)"
  98.     DRWSTRING 1, 7, 0, A$, 10, 32
  99.     A$ = "SPRITEPUT(Mode%,TranSColr,X,Y,SpriteArray)"
  100.     DRWSTRING 1, 7, 0, A$, 10, 48
  101.     FILLAREA X1 + 2, Y1 + 2, 0, 0
  102.     BLKSIZE2 = (BLKROTATESIZE(45, GFXBLK1(0)) \ 2) + 1
  103.     REDIM GFXBLK2(0 TO BLKSIZE2) AS INTEGER
  104.     REDIM GFXBLK3(0 TO BLKSIZE2) AS INTEGER
  105.     BLKGET X1, Y1, X2, Y2, GFXBLK3(0)
  106.     SETVIEW 0, 64, GETMAXX, GETMAXY
  107.     FOR I = 0 TO 360 STEP 3
  108.         DUMMY = BLKROTATE(I, 1, GFXBLK1(0), GFXBLK2(0))
  109.         SPRITEPUT 1, 1, X - GFXBLK3(0) \ 2, Y - GFXBLK3(1) \ 2, GFXBLK3(0)
  110.         SPRITEGAP 1, X - GFXBLK2(0) \ 2, Y - GFXBLK2(1) \ 2, GFXBLK2(0), GFXBLK3(0)
  111.         SDELAY 4
  112.     NEXT I
  113.     SPRITEPUT 1, 1, X - GFXBLK3(0) \ 2, Y - GFXBLK3(1) \ 2, GFXBLK3(0)
  114.     BLKPUT 1, X1, Y1, GFXBLK1(0)
  115.     GETKEY RET$
  116.     SETVIEW 0, 0, GETMAXX, GETMAXY
  117.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  118.         FILLSCREEN 0
  119.         EXIT SUB
  120.     END IF
  121.  
  122.     '*************************************************************************
  123.     '* SHOW BLOCK RESIZE AND SPRITE STUFF
  124.     '*************************************************************************
  125.     A$ = "BLKRESIZE (NewWidth,NewHeight,SourceGfxBlock,DestGfxBlock)   "
  126.     DRWSTRING 1, 7, 0, A$, 10, 16
  127.     A$ = "SPRITEGAP(TranSColr,X,Y,SpriteArray,BackGroundGfxBlock)"
  128.     DRWSTRING 1, 7, 0, A$, 10, 32
  129.     A$ = "SPRITEPUT(Mode%,TranSColr,X,Y,SpriteArray)"
  130.     DRWSTRING 1, 7, 0, A$, 10, 48
  131.     SETVIEW 0, 64, GETMAXX, GETMAXY
  132.     FILLAREA X1 + 2, Y1 + 2, 0, 0
  133.     BLKSIZE3 = (((X2 - X1 + 1) * (Y2 - Y1 + 1)) / 2) + 3
  134.     REDIM GFXBLK3(0 TO BLKSIZE3) AS INTEGER
  135.     BLKGET X1, Y1, X2, Y2, GFXBLK3(0)
  136.     BLKSIZE2 = (((GFXBLK1(0) + 1) * (GFXBLK1(1) + 1)) / 2) + 3
  137.     REDIM GFXBLK2(BLKSIZE2) AS INTEGER
  138.     FOR I = 0 TO XINC
  139.         BLKRESIZE GFXBLK1(0) - I, GFXBLK1(1) - I, GFXBLK1(0), GFXBLK2(0)
  140.         SPRITEPUT 1, 1, X - GFXBLK3(0) \ 2, Y - GFXBLK3(1) \ 2, GFXBLK3(0)
  141.         SPRITEGAP 1, X - GFXBLK2(0) \ 2, Y - GFXBLK2(1) \ 2, GFXBLK2(0), GFXBLK3(0)
  142.         SDELAY 5
  143.     NEXT I
  144.     SPRITEPUT 1, 1, X - GFXBLK3(0) \ 2, Y - GFXBLK3(1) \ 2, GFXBLK3(0)
  145.     FOR I = XINC TO 0 STEP -1
  146.         BLKRESIZE GFXBLK1(0) - I, GFXBLK1(1) - I, GFXBLK1(0), GFXBLK2(0)
  147.         SPRITEPUT 1, 1, X - GFXBLK3(0) \ 2, Y - GFXBLK3(1) \ 2, GFXBLK3(0)
  148.         SPRITEGAP 1, X - GFXBLK2(0) \ 2, Y - GFXBLK2(1) \ 2, GFXBLK2(0), GFXBLK3(0)
  149.         SDELAY 5
  150.     NEXT I
  151.     SPRITEPUT 1, 1, X - GFXBLK1(0) \ 2, Y - GFXBLK1(1) \ 2, GFXBLK1(0)
  152.     GETKEY RET$
  153.     SETVIEW 0, 0, GETMAXX, GETMAXY
  154.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  155.         FILLSCREEN 0
  156.         EXIT SUB
  157.     END IF
  158.  
  159.     '*************************************************************************
  160.     '* SHOW BLOCK PUT (PUT THE "CHUNKS" RANDOMLY AROUND THE SCREEN)
  161.     '*************************************************************************
  162.     SETVIEW 0, 31, GETMAXX, 64
  163.     FILLVIEW 0
  164.     A$ = "BLKPUT (Mode,X,Y,GfxBlock)   "
  165.     DRWSTRING 1, 7, 0, A$, 10, 16
  166.     XINC = GETMAXX \ 10
  167.     YINC = GETMAXY \ 10
  168.     SETVIEW 0, 32, GETMAXX, GETMAXY
  169.     FOR I = 0 TO GETMAXX \ 2
  170.         X = (GETMAXX + XINC) * RND - XINC
  171.         Y = (GETMAXY + YINC) * RND - YINC
  172.         BLKPUT 1, X, Y, GFXBLK1(0)
  173.     NEXT I
  174.     GETKEY RET$
  175.     SETVIEW 0, 0, GETMAXX, GETMAXY
  176.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  177.         FILLSCREEN 0
  178.         EXIT SUB
  179.     END IF
  180.  
  181.     END SUB
  182.  
  183.     SUB DOCLIP (RET$)
  184.     REM $DYNAMIC
  185.     DEFINT A-Z
  186.  
  187.     '*************************************************************************
  188.     '* SET UP AND SHOW THE TITLE
  189.     '*************************************************************************
  190.     TITLE$ = "DEMO 2: Clipping capability"
  191.     PALSET PAL2, 0, 255
  192.  
  193.     '*************************************************************************
  194.     '* SET UP THE WINDOWS
  195.     '*************************************************************************
  196.     FILLSCREEN 0
  197.     SETVIEW 0, 0, GETMAXX, GETMAXY
  198.     DRWSTRING 1, 7, 0, TITLE$, 10, 0
  199.     A$ = "All primitives automatically clip"
  200.     DRWSTRING 1, 7, 0, A$, 10, 16
  201.  
  202.     WDTH = (GETMAXX + 1) / 2.25
  203.     SPCINGX = ((GETMAXX + 1) - WDTH * 2) / 3
  204.     HGTH = (GETMAXY + 1 - 35) / 2.25
  205.     SPCINGY = ((GETMAXY + 1 - 35) - HGTH * 2) / 3
  206.     XINC = WDTH * 1.5
  207.     YINC = HGTH * 1.5
  208.     XSUB = WDTH * .25
  209.     YSUB = HGTH * .25
  210.  
  211.  
  212.     B1X1 = SPCINGX
  213.     B1X2 = B1X1 + WDTH
  214.     B1Y1 = SPCINGY + 35
  215.     B1Y2 = B1Y1 + HGTH
  216.  
  217.     B2X2 = GETMAXX - SPCINGX
  218.     B2X1 = B2X2 - WDTH
  219.     B2Y1 = SPCINGY + 35
  220.     B2Y2 = B2Y1 + HGTH
  221.  
  222.     B3X2 = GETMAXX - SPCINGX
  223.     B3X1 = B3X2 - WDTH
  224.     B3Y2 = GETMAXY - SPCINGY
  225.     B3Y1 = B3Y2 - HGTH
  226.  
  227.     B4X1 = SPCINGX
  228.     B4X2 = B4X1 + WDTH
  229.     B4Y2 = GETMAXY - SPCINGY
  230.     B4Y1 = B4Y2 - HGTH
  231.  
  232.     DRWBOX 1, 15, B1X1, B1Y1, B1X2, B1Y2
  233.     DRWBOX 1, 15, B2X1, B2Y1, B2X2, B2Y2
  234.     DRWBOX 1, 15, B3X1, B3Y1, B3X2, B3Y2
  235.     DRWBOX 1, 15, B4X1, B4Y1, B4X2, B4Y2
  236.  
  237.     B1X1 = B1X1 + 1
  238.     B1Y1 = B1Y1 + 1
  239.     B1X2 = B1X2 - 1
  240.     B1Y2 = B1Y2 - 1
  241.  
  242.     B2X1 = B2X1 + 1
  243.     B2Y1 = B2Y1 + 1
  244.     B2X2 = B2X2 - 1
  245.     B2Y2 = B2Y2 - 1
  246.  
  247.     B3X1 = B3X1 + 1
  248.     B3Y1 = B3Y1 + 1
  249.     B3X2 = B3X2 - 1
  250.     B3Y2 = B3Y2 - 1
  251.  
  252.     B4X1 = B4X1 + 1
  253.     B4Y1 = B4Y1 + 1
  254.     B4X2 = B4X2 - 1
  255.     B4Y2 = B4Y2 - 1
  256.  
  257.     Colr = 1
  258.  
  259.     '*************************************************************************
  260.     '* SHOW THE CLIPPING
  261.     '*************************************************************************
  262.     FOR I = 0 TO GETMAXX \ 6
  263.         FOR J = 1 TO 4
  264.             SELECT CASE J
  265.                 CASE IS = 1
  266.                     SETVIEW B1X1, B1Y1, B1X2, B1Y2
  267.                     FOR K = 0 TO 4
  268.                         X = B1X1 + RND * XINC - XSUB
  269.                         Y = B1Y1 + RND * XINC - XSUB
  270.                         DRWPOINT 1, Colr, X, Y
  271.                         Colr = Colr + 1
  272.                         IF Colr > 15 THEN
  273.                             Colr = 1
  274.                         END IF
  275.                     NEXT K
  276.                 CASE IS = 2
  277.                     SETVIEW B2X1, B2Y1, B2X2, B2Y2
  278.                     X1 = B2X1 + RND * XINC - XSUB
  279.                     Y1 = B2Y1 + RND * XINC - XSUB
  280.                     X2 = B2X1 + RND * XINC - XSUB
  281.                     Y2 = B2Y1 + RND * XINC - XSUB
  282.                     DRWLINE 1, Colr, X1, Y1, X2, Y2
  283.                     Colr = Colr + 1
  284.                     IF Colr > 15 THEN
  285.                         Colr = 1
  286.                     END IF
  287.                 CASE IS = 3
  288.                     SETVIEW B3X1, B3Y1, B3X2, B3Y2
  289.                     X = B3X1 + RND * XINC - XSUB
  290.                     Y = B3Y1 + RND * XINC - XSUB
  291.                     RAD = RND * WDTH \ 2
  292.                     DRWCIRCLE 1, Colr, X, Y, RAD
  293.                     Colr = Colr + 1
  294.                     IF Colr > 15 THEN
  295.                         Colr = 1
  296.                     END IF
  297.                 CASE IS = 4
  298.                     SETVIEW B4X1, B4Y1, B4X2, B4Y2
  299.                     X = B4X1 + RND * XINC - XSUB
  300.                     Y = B4Y1 + RND * XINC - XSUB
  301.                     RADX = RND * WDTH \ 2
  302.                     RADY = RND * WDTH \ 2
  303.                     DRWELLIPSE 1, Colr, X, Y, RADX, RADY
  304.                     Colr = Colr + 1
  305.                     IF Colr > 15 THEN
  306.                         Colr = 1
  307.                     END IF
  308.             END SELECT
  309.         NEXT J
  310.     NEXT I
  311.     SETVIEW 0, 0, GETMAXX, GETMAXY
  312.     GETKEY RET$
  313.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  314.         EXIT SUB
  315.     END IF
  316.  
  317.     END SUB
  318.  
  319.     SUB DOFILL (RET$)
  320.     REM $DYNAMIC
  321.     DEFINT A-Z
  322.  
  323.     '*************************************************************************
  324.     '* SET UP THE TITLE
  325.     '*************************************************************************
  326.     TITLE$ = "DEMO 3: Filling functions"
  327.     PALSET PAL, 0, 255
  328.  
  329.     '*************************************************************************
  330.     '* SHOW SCREEN FILL
  331.     '*************************************************************************
  332.     FILLSCREEN 10
  333.     SETVIEW 0, 0, GETMAXX, GETMAXY
  334.     DRWSTRING 1, 7, 0, TITLE$, 10, 0
  335.     A$ = "FILLSCREEN (Color)"
  336.     DRWSTRING 1, 7, 0, A$, 10, 16
  337.     GETKEY RET$
  338.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  339.         SETVIEW 0, 0, GETMAXX, GETMAXY
  340.         EXIT SUB
  341.     END IF
  342.  
  343.     '*************************************************************************
  344.     '* SET UP WINDOWS AND SHOW VIEWPORT FILL
  345.     '*************************************************************************
  346.     FILLSCREEN 0
  347.     DRWSTRING 1, 7, 0, TITLE$, 10, 0
  348.     A$ = "FILLVIEW (Color)"
  349.     DRWSTRING 1, 7, 0, A$, 10, 16
  350.  
  351.     WDTH = (GETMAXX + 1) / 2.25
  352.     SPCINGX = ((GETMAXX + 1) - WDTH * 2) / 3
  353.     HGTH = (GETMAXY + 1 - 35) / 2.25
  354.     SPCINGY = ((GETMAXY + 1 - 35) - HGTH * 2) / 3
  355.     XINC = WDTH * 1.5
  356.     YINC = HGTH * 1.5
  357.     XSUB = WDTH * .25
  358.     YSUB = HGTH * .25
  359.  
  360.     B1X1 = SPCINGX
  361.     B1X2 = B1X1 + WDTH
  362.     B1Y1 = SPCINGY + 35
  363.     B1Y2 = B1Y1 + HGTH
  364.  
  365.     B2X2 = GETMAXX - SPCINGX
  366.     B2X1 = B2X2 - WDTH
  367.     B2Y1 = SPCINGY + 35
  368.     B2Y2 = B2Y1 + HGTH
  369.  
  370.     B3X2 = GETMAXX - SPCINGX
  371.     B3X1 = B3X2 - WDTH
  372.     B3Y2 = GETMAXY - SPCINGY
  373.     B3Y1 = B3Y2 - HGTH
  374.  
  375.     B4X1 = SPCINGX
  376.     B4X2 = B4X1 + WDTH
  377.     B4Y2 = GETMAXY - SPCINGY
  378.     B4Y1 = B4Y2 - HGTH
  379.  
  380.     DRWBOX 1, 15, B1X1, B1Y1, B1X2, B1Y2
  381.     DRWBOX 1, 15, B2X1, B2Y1, B2X2, B2Y2
  382.     DRWBOX 1, 15, B3X1, B3Y1, B3X2, B3Y2
  383.     DRWBOX 1, 15, B4X1, B4Y1, B4X2, B4Y2
  384.  
  385.     B1X1 = B1X1 + 1
  386.     B1Y1 = B1Y1 + 1
  387.     B1X2 = B1X2 - 1
  388.     B1Y2 = B1Y2 - 1
  389.  
  390.     B2X1 = B2X1 + 1
  391.     B2Y1 = B2Y1 + 1
  392.     B2X2 = B2X2 - 1
  393.     B2Y2 = B2Y2 - 1
  394.  
  395.     B3X1 = B3X1 + 1
  396.     B3Y1 = B3Y1 + 1
  397.     B3X2 = B3X2 - 1
  398.     B3Y2 = B3Y2 - 1
  399.  
  400.     B4X1 = B4X1 + 1
  401.     B4Y1 = B4Y1 + 1
  402.     B4X2 = B4X2 - 1
  403.     B4Y2 = B4Y2 - 1
  404.  
  405.     GETKEY RET$
  406.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  407.         SETVIEW 0, 0, GETMAXX, GETMAXY
  408.         EXIT SUB
  409.     END IF
  410.  
  411.     SETVIEW B1X1, B1Y1, B1X2, B1Y2
  412.     FILLVIEW (10)
  413.     SETVIEW B2X1, B2Y1, B2X2, B2Y2
  414.     FILLVIEW (12)
  415.     SETVIEW B3X1, B3Y1, B3X2, B3Y2
  416.     FILLVIEW (13)
  417.     SETVIEW B4X1, B4Y1, B4X2, B4Y2
  418.     FILLVIEW (14)
  419.  
  420.     SETVIEW 0, 0, GETMAXX, GETMAXY
  421.     GETKEY RET$
  422.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  423.         SETVIEW 0, 0, GETMAXX, GETMAXY
  424.         EXIT SUB
  425.     END IF
  426.  
  427.     '*************************************************************************
  428.     '* SET UP WINDOW AND SHOW AREA FILL
  429.     '*************************************************************************
  430.     FILLSCREEN 0
  431.     DRWSTRING 1, 7, 0, TITLE$, 10, 0
  432.     A$ = "FILLAREA (Xseed,Yseed,BrdrCol,FilCol)"
  433.     DRWSTRING 1, 7, 0, A$, 10, 16
  434.  
  435.     DRWBOX 1, 15, 5, 35, GETMAXX - 4, GETMAXY - 4
  436.     SETVIEW 6, 36, GETMAXX - 5, GETMAXY - 5
  437.  
  438.     Colr = 1
  439.     FOR I = 0 TO GETMAXX \ 10
  440.         X = 50 + RND * (GETMAXX - 50)
  441.         Y = 50 + RND * (GETMAXY - 50)
  442.         RADX = 2 + RND * GETMAXX \ 20
  443.         RADY = 2 + RND * GETMAXX \ 20
  444.         DRWELLIPSE 1, Colr, X, Y, RADX, RADY
  445.         Colr = Colr + 1
  446.         IF Colr > 9 THEN
  447.             Colr = 1
  448.         END IF
  449.     NEXT I
  450.  
  451.     FOR I = 0 TO GETMAXX \ 15
  452.         X = 50 + RND * (GETMAXX - 50)
  453.         Y = 50 + RND * (GETMAXY - 50)
  454.         RADX = 2 + RND * GETMAXX \ 20
  455.         RADY = 2 + RND * GETMAXX \ 20
  456.         DRWELLIPSE 1, 12, X, Y, RADX, RADY
  457.     NEXT I
  458.  
  459.     GETKEY RET$
  460.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  461.         SETVIEW 0, 0, GETMAXX, GETMAXY
  462.         EXIT SUB
  463.     END IF
  464.     
  465.     FILLAREA 7, 37, 12, 10
  466.  
  467.     GETKEY RET$
  468.     SETVIEW 0, 0, GETMAXX, GETMAXY
  469.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  470.         EXIT SUB
  471.     END IF
  472.  
  473.     '*************************************************************************
  474.     '* SET UP WINDOW AND SHOW COLOR FILL
  475.     '*************************************************************************
  476.     FILLSCREEN 0
  477.     DRWSTRING 1, 7, 0, TITLE$, 10, 0
  478.     A$ = "FILLCOLOR (Xseed,Yseed,OldCol,FilCol)"
  479.     DRWSTRING 1, 7, 0, A$, 10, 16
  480.  
  481.     DRWBOX 1, 15, 5, 35, GETMAXX - 4, GETMAXY - 4
  482.     SETVIEW 6, 36, GETMAXX - 5, GETMAXY - 5
  483.  
  484.     Colr = 1
  485.     FOR I = 0 TO GETMAXX \ 10
  486.         X = 50 + RND * (GETMAXX - 50)
  487.         Y = 50 + RND * (GETMAXY - 50)
  488.         RADX = 2 + RND * GETMAXX \ 20
  489.         RADY = 2 + RND * GETMAXX \ 20
  490.         DRWELLIPSE 1, Colr, X, Y, RADX, RADY
  491.         Colr = Colr + 1
  492.         IF Colr > 9 THEN
  493.             Colr = 1
  494.         END IF
  495.     NEXT I
  496.  
  497.     FOR I = 0 TO GETMAXX \ 15
  498.         X = 50 + RND * (GETMAXX - 50)
  499.         Y = 50 + RND * (GETMAXY - 50)
  500.         RADX = 2 + RND * GETMAXX \ 20
  501.         RADY = 2 + RND * GETMAXX \ 20
  502.         DRWELLIPSE 1, 12, X, Y, RADX, RADY
  503.     NEXT I
  504.  
  505.     GETKEY RET$
  506.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  507.         SETVIEW 0, 0, GETMAXX, GETMAXY
  508.         EXIT SUB
  509.     END IF
  510.      
  511.     FILLCOLOR 7, 37, 0, 10
  512.  
  513.     SETVIEW 0, 0, GETMAXX, GETMAXY
  514.     GETKEY RET$
  515.  
  516.     END SUB
  517.  
  518.     SUB DOPAL (RET$)
  519.     REM $DYNAMIC
  520.     DEFINT A-Z
  521.  
  522.     '*************************************************************************
  523.     '* SET UP THE TITLE
  524.     '*************************************************************************
  525.     TITLE$ = "DEMO 4: Palette functions"
  526.     PALSET ORGPAL, 0, 255
  527.  
  528.     '*************************************************************************
  529.     '* SHOW PALETTE SET/GET
  530.     '*************************************************************************
  531.     FILLSCREEN 0
  532.     SETVIEW 0, 0, GETMAXX, GETMAXY
  533.     DRWSTRING 1, 7, 0, TITLE$, 10, 0
  534.     A$ = "PALGET (Palette$,FirstColr,LastColr) PALSET (Palette$,FirtColr,LastColr)"
  535.     DRWSTRING 1, 7, 0, A$, 10, 16
  536.     Colr = 16
  537.     X1 = 10
  538.     X2 = GETMAXX - 9
  539.     Y1 = 35
  540.     Y2 = GETMAXY - 9
  541.     I = 0
  542.     WHILE Y1 + I < Y2 - I
  543.         DRWBOX 1, Colr, X1 + I, Y1 + I, X2 - I, Y2 - I
  544.         Colr = Colr + 1
  545.         IF Colr > 255 THEN
  546.             Colr = 16
  547.         END IF
  548.         I = I + 1
  549.     WEND
  550.     GETKEY RET$
  551.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  552.         FILLSCREEN 0
  553.         PALSET PAL, 16, 255
  554.         SETVIEW 0, 0, GETMAXX, GETMAXY
  555.         EXIT SUB
  556.     END IF
  557.     PALSET PAL, 16, 255
  558.  
  559.     '*************************************************************************
  560.     '* SHOW PALETTE AUTO FADE OUT/IN
  561.     '*************************************************************************
  562.     A$ = "PALIOAUTO (Palette$,FirstColr,LastColr,Speed)                           "
  563.     DRWSTRING 1, 7, 0, A$, 10, 16
  564.     GETKEY RET$
  565.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  566.         SETVIEW 0, 0, GETMAXX, GETMAXY
  567.         EXIT SUB
  568.     END IF
  569.     PALIOAUTO PAL, 16, 255, -2
  570.     PALIOAUTO PAL, 16, 255, 2
  571.  
  572.     '*************************************************************************
  573.     '* SHOW PALETTE AUTO FADE TO
  574.     '*************************************************************************
  575.     A$ = "PALCHGAUTO (Palette$,NewPalette$,FirstColr,LastColr,Speed)"
  576.     DRWSTRING 1, 7, 0, A$, 10, 16
  577.     GETKEY RET$
  578.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  579.         SETVIEW 0, 0, GETMAXX, GETMAXY
  580.         EXIT SUB
  581.     END IF
  582.     PALCHGAUTO PAL, PAL2, 16, 255, 2
  583.     PALCHGAUTO PAL2, PAL, 16, 255, 2
  584.  
  585.     '*************************************************************************
  586.     '* SHOW PALETTE ROTATE
  587.     '*************************************************************************
  588.     A$ = "PALROTATE (Palette$,FirstColr,LastColr,Shift)             "
  589.     DRWSTRING 1, 7, 0, A$, 10, 16
  590.     GETKEY RET$
  591.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  592.         SETVIEW 0, 0, GETMAXX, GETMAXY
  593.         EXIT SUB
  594.     END IF
  595.     FOR I = 0 TO 240
  596.         PALROTATE PAL, 16, 255, 2
  597.         PALGET PAL, 16, 255
  598.     NEXT I
  599.     FOR I = 0 TO 120
  600.         PALROTATE PAL, 16, 255, -8
  601.         PALGET PAL, 16, 255
  602.     NEXT I
  603.     GETKEY RET$
  604.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  605.         SETVIEW 0, 0, GETMAXX, GETMAXY
  606.         EXIT SUB
  607.     END IF
  608.  
  609.     END SUB
  610.  
  611.     SUB DOPRIMS (RET$)
  612.     REM $DYNAMIC
  613.     DEFINT A-Z
  614.  
  615.     DIM P1 AS P2DType
  616.     DIM OFF1 AS P2DType
  617.     DIM OFF2 AS P2DType
  618.     DIM P2 AS P2DType
  619.  
  620.     '*************************************************************************
  621.     '* SET UP THE TITLE
  622.     '*************************************************************************
  623.     TITLE$ = "DEMO 1: Primitives"
  624.     PALSET PAL, 0, 255
  625.      
  626.     '*************************************************************************
  627.     '* DRAW SOME POINTS
  628.     '*************************************************************************
  629.     FILLSCREEN 0
  630.     SETVIEW 0, 0, GETMAXX, GETMAXY
  631.     DRWSTRING 1, 7, 0, TITLE$, 10, 0
  632.     A$ = "DRWPOINT (Mode,Color,X1,Y1,X2,Y2)"
  633.     DRWSTRING 1, 7, 0, A$, 10, 18
  634.     SETVIEW 0, 32, GETMAXX, GETMAXY
  635.     Colr = 1
  636.     NUMOF = GETMAXX * 2
  637.     FOR A = 0 TO NUMOF
  638.         X1 = RND * GETMAXX
  639.         Y1 = RND * GETMAXY
  640.         DRWPOINT 1, Colr, X1, Y1
  641.         Colr = Colr + 1
  642.         IF Colr > 15 THEN
  643.             Colr = 1
  644.         END IF
  645.     NEXT A
  646.     GETKEY RET$
  647.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  648.         SETVIEW 0, 0, GETMAXX, GETMAXY
  649.         EXIT SUB
  650.     END IF
  651.  
  652.     '*************************************************************************
  653.     '* DRAW SOME LINES
  654.     '*************************************************************************
  655.     SETVIEW 0, 0, GETMAXX, GETMAXY
  656.     FILLSCREEN 0
  657.     DRWSTRING 1, 7, 0, TITLE$, 10, 0
  658.     A$ = "DRWLINE (Mode,Color,X1,Y1,X2,Y2)"
  659.     DRWSTRING 1, 7, 0, A$, 10, 18
  660.     SETVIEW 0, 32, GETMAXX, GETMAXY
  661.     NUMOF = GETMAXX \ 6
  662.     FOR A = 0 TO NUMOF
  663.         X1 = RND * GETMAXX
  664.         Y1 = RND * GETMAXY
  665.         X2 = RND * GETMAXX
  666.         Y2 = RND * GETMAXY
  667.         DRWLINE 1, Colr, X1, Y1, X2, Y2
  668.         Colr = Colr + 1
  669.         IF Colr > 15 THEN
  670.             Colr = 1
  671.         END IF
  672.     NEXT A
  673.     GETKEY RET$
  674.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  675.         SETVIEW 0, 0, GETMAXX, GETMAXY
  676.         EXIT SUB
  677.     END IF
  678.  
  679.     '*************************************************************************
  680.     '* DRAW SOME ANTIALIASED LINES
  681.     '*************************************************************************
  682.     SETVIEW 0, 0, GETMAXX, GETMAXY
  683.     FILLSCREEN 0
  684.     DRWSTRING 1, 7, 0, TITLE$, 10, 0
  685.     A$ = "DRWALINE (IntsBits,Color,X1,Y1,X2,Y2)  [antialiased lines]"
  686.     DRWSTRING 1, 7, 0, A$, 10, 18
  687.     SETVIEW 0, 32, GETMAXX, GETMAXY
  688.     NUMOF = GETMAXX \ 8
  689.     '* SET UP THE PALETTE..WE USE PCXPAL AS A TEMPORARY PALETTE
  690.     INTSBITS = 2
  691.     NUMLEVELS = 2 ^ INTSBITS
  692.     PALGET PCXPAL, 0, 255
  693.     FOR I = 0 TO NUMLEVELS - 1
  694.         '* WE DO NOT SHADE COMPLETELY TO ZERO: COLORS RANGE FROM 63 - 28
  695.  
  696.         '* BLUE
  697.         OFST = 1 + (128 + NUMLEVELS * 0 + I) * 3
  698.         MID$(PCXPAL, OFST + 0, 1) = CHR$(0)
  699.         MID$(PCXPAL, OFST + 1, 1) = CHR$(0)
  700.         MID$(PCXPAL, OFST + 2, 1) = CHR$(63 - 35 * I / (NUMLEVELS - 1))
  701.  
  702.         '* GREEN
  703.         OFST = 1 + (128 + NUMLEVELS * 1 + I) * 3
  704.         MID$(PCXPAL, OFST + 0, 1) = CHR$(0)
  705.         MID$(PCXPAL, OFST + 1, 1) = CHR$(63 - 35 * I / (NUMLEVELS - 1))
  706.         MID$(PCXPAL, OFST + 2, 1) = CHR$(0)
  707.      
  708.         '* CYAN
  709.         OFST = 1 + (128 + NUMLEVELS * 2 + I) * 3
  710.         MID$(PCXPAL, OFST + 0, 1) = CHR$(0)
  711.         MID$(PCXPAL, OFST + 1, 1) = CHR$(63 - 35 * I / (NUMLEVELS - 1))
  712.         MID$(PCXPAL, OFST + 2, 1) = CHR$(63 - 35 * I / (NUMLEVELS - 1))
  713.  
  714.         '* RED
  715.         OFST = 1 + (128 + NUMLEVELS * 3 + I) * 3
  716.         MID$(PCXPAL, OFST + 0, 1) = CHR$(63 - 35 * I / (NUMLEVELS - 1))
  717.         MID$(PCXPAL, OFST + 1, 1) = CHR$(0)
  718.         MID$(PCXPAL, OFST + 2, 1) = CHR$(0)
  719.  
  720.         '* MAGENTA
  721.         OFST = 1 + (128 + NUMLEVELS * 4 + I) * 3
  722.         MID$(PCXPAL, OFST + 0, 1) = CHR$(63 - 35 * I / (NUMLEVELS - 1))
  723.         MID$(PCXPAL, OFST + 1, 1) = CHR$(0)
  724.         MID$(PCXPAL, OFST + 2, 1) = CHR$(63 - 35 * I / (NUMLEVELS - 1))
  725.  
  726.         '* YELLOW
  727.         OFST = 1 + (128 + NUMLEVELS * 5 + I) * 3
  728.         MID$(PCXPAL, OFST + 0, 1) = CHR$(63 - 35 * I / (NUMLEVELS - 1))
  729.         MID$(PCXPAL, OFST + 1, 1) = CHR$(63 - 35 * I / (NUMLEVELS - 1))
  730.         MID$(PCXPAL, OFST + 2, 1) = CHR$(0)
  731.  
  732.         '* WHITE
  733.         OFST = 1 + (128 + NUMLEVELS * 6 + I) * 3
  734.         MID$(PCXPAL, OFST + 0, 1) = CHR$(63 - 35 * I / (NUMLEVELS - 1))
  735.         MID$(PCXPAL, OFST + 1, 1) = CHR$(63 - 35 * I / (NUMLEVELS - 1))
  736.         MID$(PCXPAL, OFST + 2, 1) = CHR$(63 - 35 * I / (NUMLEVELS - 1))
  737.     NEXT I
  738.     PALSET PCXPAL, 0, 255
  739.  
  740.     Colr = 0
  741.     FOR A = 0 TO NUMOF
  742.         X1 = RND * GETMAXX
  743.         Y1 = RND * GETMAXY
  744.         X2 = RND * GETMAXX
  745.         Y2 = RND * GETMAXY
  746.         DRWALINE INTSBITS, 128 + Colr * NUMLEVELS, X1, Y1, X2, Y2
  747.         Colr = Colr + 1
  748.         IF Colr > 6 THEN
  749.             Colr = 0
  750.         END IF
  751.     NEXT A
  752.     GETKEY RET$
  753.     PALSET ORGPAL, 0, 255
  754.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  755.         SETVIEW 0, 0, GETMAXX, GETMAXY
  756.         EXIT SUB
  757.     END IF
  758.  
  759.     '*************************************************************************
  760.     '* DRAW SOME BOXES
  761.     '*************************************************************************
  762.     SETVIEW 0, 0, GETMAXX, GETMAXY
  763.     FILLSCREEN 0
  764.     DRWSTRING 1, 7, 0, TITLE$, 10, 0
  765.     A$ = "DRWBOX (Mode,Color,X1,Y1,X2,Y2)"
  766.     DRWSTRING 1, 7, 0, A$, 10, 18
  767.     SETVIEW 0, 32, GETMAXX, GETMAXY
  768.     NUMOF = GETMAXX \ 10
  769.     FOR A = 0 TO NUMOF
  770.         X1 = RND * GETMAXX
  771.         Y1 = RND * GETMAXY
  772.         X2 = RND * GETMAXX
  773.         Y2 = RND * GETMAXY
  774.         DRWBOX 1, Colr, X1, Y1, X2, Y2
  775.         Colr = Colr + 1
  776.         IF Colr > 15 THEN
  777.             Colr = 1
  778.         END IF
  779.     NEXT A
  780.     GETKEY RET$
  781.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  782.         SETVIEW 0, 0, GETMAXX, GETMAXY
  783.         EXIT SUB
  784.     END IF
  785.  
  786.     '*************************************************************************
  787.     '* DRAW SOME FILLED BOXES
  788.     '*************************************************************************
  789.     SETVIEW 0, 0, GETMAXX, GETMAXY
  790.     FILLSCREEN 0
  791.     DRWSTRING 1, 7, 0, TITLE$, 10, 0
  792.     A$ = "DRWFILLBOX (Mode,Color,X1,Y1,X2,Y2)"
  793.     DRWSTRING 1, 7, 0, A$, 10, 18
  794.     SETVIEW 0, 32, GETMAXX, GETMAXY
  795.     NUMOF = GETMAXX \ 15
  796.     FOR A = 0 TO NUMOF
  797.         X1 = RND * GETMAXX
  798.         Y1 = RND * GETMAXY
  799.         X2 = RND * GETMAXX
  800.         Y2 = RND * GETMAXY
  801.         DRWFILLBOX 1, Colr, X1, Y1, X2, Y2
  802.         Colr = Colr + 1
  803.         IF Colr > 15 THEN
  804.             Colr = 1
  805.         END IF
  806.     NEXT A
  807.     GETKEY RET$
  808.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  809.         SETVIEW 0, 0, GETMAXX, GETMAXY
  810.         EXIT SUB
  811.     END IF
  812.  
  813.     '*************************************************************************
  814.     '* DRAW SOME CIRCLES
  815.     '*************************************************************************
  816.     SETVIEW 0, 0, GETMAXX, GETMAXY
  817.     FILLSCREEN 0
  818.     DRWSTRING 1, 7, 0, TITLE$, 10, 0
  819.     A$ = "DRWCIRCLE (Mode,Color,Cx,Cy,Radius)"
  820.     DRWSTRING 1, 7, 0, A$, 10, 18
  821.     SETVIEW 0, 32, GETMAXX, GETMAXY
  822.     NUMOF = GETMAXX \ 20
  823.     MAXRAD = GETMAXX \ 2
  824.     FOR A = 0 TO NUMOF
  825.         X = RND * GETMAXX
  826.         Y = RND * GETMAXY
  827.         RAD = RND * MAXRAD
  828.         DRWCIRCLE 1, Colr, X, Y, RAD
  829.         Colr = Colr + 1
  830.         IF Colr > 15 THEN
  831.             Colr = 1
  832.         END IF
  833.     NEXT A
  834.     GETKEY RET$
  835.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  836.         SETVIEW 0, 0, GETMAXX, GETMAXY
  837.         EXIT SUB
  838.     END IF
  839.  
  840.     '*************************************************************************
  841.     '* DRAW SOME FILLED CIRCLES
  842.     '*************************************************************************
  843.     SETVIEW 0, 0, GETMAXX, GETMAXY
  844.     FILLSCREEN 0
  845.     DRWSTRING 1, 7, 0, TITLE$, 10, 0
  846.     A$ = "DRWFILLCIRCLE (Mode,Color,Cx,Cy,Radius)"
  847.     DRWSTRING 1, 7, 0, A$, 10, 18
  848.     SETVIEW 0, 32, GETMAXX, GETMAXY
  849.     NUMOF = GETMAXX \ 25
  850.     MAXRAD = GETMAXX \ 2
  851.     FOR A = 0 TO NUMOF
  852.         X = RND * GETMAXX
  853.         Y = RND * GETMAXY
  854.         RAD = RND * MAXRAD
  855.         DRWFILLCIRCLE 1, Colr, X, Y, RAD
  856.         Colr = Colr + 1
  857.         IF Colr > 15 THEN
  858.             Colr = 1
  859.         END IF
  860.     NEXT A
  861.     GETKEY RET$
  862.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  863.         SETVIEW 0, 0, GETMAXX, GETMAXY
  864.         EXIT SUB
  865.     END IF
  866.  
  867.     '*************************************************************************
  868.     '* DRAW SOME ELLIPSES
  869.     '*************************************************************************
  870.     SETVIEW 0, 0, GETMAXX, GETMAXY
  871.     FILLSCREEN 0
  872.     DRWSTRING 1, 7, 0, TITLE$, 10, 0
  873.     A$ = "DRWELLIPSE (Mode,Color,Cx,Cy,RadiusX,RadiusY)"
  874.     DRWSTRING 1, 7, 0, A$, 10, 18
  875.     SETVIEW 0, 32, GETMAXX, GETMAXY
  876.     NUMOF = GETMAXX \ 20
  877.     MAXRAD = GETMAXX \ 2
  878.     FOR A = 0 TO NUMOF
  879.         X = RND * GETMAXX
  880.         Y = RND * GETMAXY + 35
  881.         RADX = RND * MAXRAD
  882.         RADY = RND * MAXRAD
  883.         DRWELLIPSE 1, Colr, X, Y, RADX, RADY
  884.         Colr = Colr + 1
  885.         IF Colr > 15 THEN
  886.             Colr = 1
  887.         END IF
  888.     NEXT A
  889.     SETVIEW 0, 0, GETMAXX, GETMAXY
  890.     GETKEY RET$
  891.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  892.         EXIT SUB
  893.     END IF
  894.  
  895.     '*************************************************************************
  896.     '* DRAW SOME FILLED ELLIPSES
  897.     '*************************************************************************
  898.     SETVIEW 0, 0, GETMAXX, GETMAXY
  899.     FILLSCREEN 0
  900.     DRWSTRING 1, 7, 0, TITLE$, 10, 0
  901.     A$ = "DRWFILLELLIPSE (Mode,Color,Cx,Cy,RadiusX,RadiusY)"
  902.     DRWSTRING 1, 7, 0, A$, 10, 18
  903.     SETVIEW 0, 32, GETMAXX, GETMAXY
  904.     NUMOF = GETMAXX \ 25
  905.     MAXRAD = GETMAXX \ 2
  906.     FOR A = 0 TO NUMOF
  907.         X = RND * GETMAXX
  908.         Y = RND * GETMAXY + 35
  909.         RADX = RND * MAXRAD
  910.         RADY = RND * MAXRAD
  911.         DRWFILLELLIPSE 1, Colr, X, Y, RADX, RADY
  912.         Colr = Colr + 1
  913.         IF Colr > 15 THEN
  914.             Colr = 1
  915.         END IF
  916.     NEXT A
  917.     SETVIEW 0, 0, GETMAXX, GETMAXY
  918.     GETKEY RET$
  919.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  920.         EXIT SUB
  921.     END IF
  922.  
  923.     '*************************************************************************
  924.     '* DRAW SOME CIRCLULAR ARCS
  925.     '*************************************************************************
  926.     SETVIEW 0, 0, GETMAXX, GETMAXY
  927.     FILLSCREEN 0
  928.     DRWSTRING 1, 7, 0, TITLE$, 10, 0
  929.     A$ = "DRWCIRARC (Mode,Color,Cx,Cy,Radius,StartAng,EndAng)"
  930.     DRWSTRING 1, 7, 0, A$, 10, 18
  931.     SETVIEW 0, 32, GETMAXX, GETMAXY
  932.     NUMOF = GETMAXX \ 20
  933.     MAXRAD = GETMAXX \ 2
  934.     FOR A = 0 TO NUMOF
  935.         X = RND * GETMAXX
  936.         Y = RND * GETMAXY
  937.         RAD = RND * MAXRAD
  938.         SANG = RND * 360
  939.         EANG = RND * 360 + SANG
  940.         DRWCIRARC 1, Colr, X, Y, RAD, SANG, EANG
  941.         Colr = Colr + 1
  942.         IF Colr > 15 THEN
  943.             Colr = 1
  944.         END IF
  945.     NEXT A
  946.     GETKEY RET$
  947.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  948.         SETVIEW 0, 0, GETMAXX, GETMAXY
  949.         EXIT SUB
  950.     END IF
  951.  
  952.     '*************************************************************************
  953.     '* DRAW SOME ELLIPTICAL ARCS
  954.     '*************************************************************************
  955.     SETVIEW 0, 0, GETMAXX, GETMAXY
  956.     FILLSCREEN 0
  957.     DRWSTRING 1, 7, 0, TITLE$, 10, 0
  958.     A$ = "DRWELLARC (Mode,Color,Cx,Cy,RadiusX,RadiusY,StartAng,EndAng)"
  959.     DRWSTRING 1, 7, 0, A$, 10, 18
  960.     SETVIEW 0, 32, GETMAXX, GETMAXY
  961.     NUMOF = GETMAXX \ 20
  962.     MAXRAD = GETMAXX \ 2
  963.     FOR A = 0 TO NUMOF
  964.         X = RND * GETMAXX
  965.         Y = RND * GETMAXY + 35
  966.         RADX = RND * MAXRAD
  967.         RADY = RND * MAXRAD
  968.         SANG = RND * 360
  969.         EANG = RND * 360 + SANG
  970.         DRWELLARC 1, Colr, X, Y, RADX, RADY, SANG, EANG
  971.         Colr = Colr + 1
  972.         IF Colr > 15 THEN
  973.             Colr = 1
  974.         END IF
  975.     NEXT A
  976.     SETVIEW 0, 0, GETMAXX, GETMAXY
  977.     GETKEY RET$
  978.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  979.         EXIT SUB
  980.     END IF
  981.  
  982.     '*************************************************************************
  983.     '* DRAW SOME CUBIC BEZIER CURVES
  984.     '*************************************************************************
  985.     SETVIEW 0, 0, GETMAXX, GETMAXY
  986.     FILLSCREEN 0
  987.     DRWSTRING 1, 7, 0, TITLE$, 10, 0
  988.     A$ = "DRWCUBICBEZIER (Mode,Color,Pon1,Poff1,Poff2,Pon2)"
  989.     DRWSTRING 1, 7, 0, A$, 10, 18
  990.     SETVIEW 0, 32, GETMAXX, GETMAXY
  991.     NUMOF = GETMAXX \ 20
  992.     FOR A = 0 TO NUMOF
  993.         P1.X = RND * GETMAXX
  994.         P1.Y = RND * GETMAXY
  995.         OFF1.X = RND * GETMAXX
  996.         OFF1.Y = RND * GETMAXY
  997.         OFF2.X = RND * GETMAXX
  998.         OFF2.Y = RND * GETMAXY
  999.         P2.X = RND * GETMAXX
  1000.         P2.Y = RND * GETMAXY
  1001.         DRWCUBICBEZIER 1, Colr, P1.X, OFF1.X, OFF2.X, P2.X
  1002.         Colr = Colr + 1
  1003.         IF Colr > 15 THEN
  1004.             Colr = 1
  1005.         END IF
  1006.     NEXT A
  1007.     GETKEY RET$
  1008.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  1009.         SETVIEW 0, 0, GETMAXX, GETMAXY
  1010.         EXIT SUB
  1011.     END IF
  1012.  
  1013.  
  1014.     END SUB
  1015.  
  1016.     SUB DOSCROLL (RET$)
  1017.     DEFINT A-Z
  1018.     REM $DYNAMIC
  1019.  
  1020.     '*************************************************************************
  1021.     '* SET UP THE TITLE
  1022.     '*************************************************************************
  1023.     TITLE$ = "DEMO 7: Scrolling and Paging Functions"
  1024.     PALSET PAL, 0, 255
  1025.     FILLSCREEN 0
  1026.     SETVIEW 0, 0, GETMAXX, GETMAXY
  1027.     DRWSTRING 1, 7, 0, TITLE$, 10, 0
  1028.  
  1029.     SPCNG = (GETMAXY - 32) \ 5
  1030.     X1 = ((GETMAXX + 1) \ 2) - SPCNG
  1031.     Y1 = (((GETMAXY + 1 - 32) \ 2) + 32) - SPCNG
  1032.     X2 = ((GETMAXX + 1) \ 2) + SPCNG
  1033.     Y2 = (((GETMAXY + 1 - 32) \ 2) + 32) + SPCNG
  1034.     SKIP = SPCNG / 15
  1035.     Num = SPCNG / SKIP
  1036.     DRWBOX 1, 12, X1, Y1, X2, Y2
  1037.     X1 = X1 + 1
  1038.     Y1 = Y1 + 1
  1039.     X2 = X2 - 1
  1040.     Y2 = Y2 - 1
  1041.     Colr = 16
  1042.     TEXT$ = "TEXT text TEXT text TEXT"
  1043.  
  1044.     '*************************************************************************
  1045.     '* SHOW SCROLLUP
  1046.     '*************************************************************************
  1047.     SETVIEW 0, 0, GETMAXX, GETMAXY
  1048.     A$ = "SCROLLUP (X1,Y1,X2,Y2,NumLines,FillColr)"
  1049.     DRWSTRING 1, 7, 0, A$, 10, 16
  1050.     SETVIEW X1, Y1, X2, Y2
  1051.     FILLVIEW 0
  1052.     NUMOF = GETMAXX \ 10
  1053.     FOR A = 0 TO NUMOF
  1054.         X = RND * GETMAXX
  1055.         Y = RND * GETMAXY
  1056.         I = RND * GETMAXX
  1057.         J = RND * GETMAXY
  1058.         DRWLINE 1, Colr, X, Y, I, J
  1059.         Colr = Colr + 3
  1060.         IF Colr > 255 THEN
  1061.             Colr = 16
  1062.         END IF
  1063.     NEXT A
  1064.     DRWSTRING 1, 7, 0, TEXT$, X1 + SPCNG, Y1 + SPCNG
  1065.     DRWSTRINGLT 1, 7, 0, TEXT$, X1 + SPCNG, Y1 + SPCNG
  1066.     DRWSTRINGDN 1, 7, 0, TEXT$, X1 + SPCNG, Y1 + SPCNG
  1067.     DRWSTRINGRT 1, 7, 0, TEXT$, X1 + SPCNG, Y1 + SPCNG
  1068.     FOR A = 0 TO Num
  1069.         SCROLLUP X1, Y1, X2, Y2, SKIP, 0   '* HERE IT IS!
  1070.     NEXT A
  1071.     GETKEY RET$
  1072.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  1073.         SETVIEW 0, 0, GETMAXX, GETMAXY
  1074.         EXIT SUB
  1075.     END IF
  1076.  
  1077.     '*************************************************************************
  1078.     '* SHOW SCROLLLT
  1079.     '*************************************************************************
  1080.     SETVIEW 0, 0, GETMAXX, GETMAXY
  1081.     A$ = "SCROLLLT (X1,Y1,X2,Y2,NumLines,FillColr)"
  1082.     DRWSTRING 1, 7, 0, A$, 10, 16
  1083.     SETVIEW X1, Y1, X2, Y2
  1084.     FILLVIEW 0
  1085.     NUMOF = GETMAXX \ 10
  1086.     FOR A = 0 TO NUMOF
  1087.         X = RND * GETMAXX
  1088.         Y = RND * GETMAXY
  1089.         I = RND * GETMAXX
  1090.         J = RND * GETMAXY
  1091.         DRWLINE 1, Colr, X, Y, I, J
  1092.         Colr = Colr + 3
  1093.         IF Colr > 255 THEN
  1094.             Colr = 16
  1095.         END IF
  1096.     NEXT A
  1097.     DRWSTRING 1, 7, 0, TEXT$, X1 + SPCNG, Y1 + SPCNG
  1098.     DRWSTRINGLT 1, 7, 0, TEXT$, X1 + SPCNG, Y1 + SPCNG
  1099.     DRWSTRINGDN 1, 7, 0, TEXT$, X1 + SPCNG, Y1 + SPCNG
  1100.     DRWSTRINGRT 1, 7, 0, TEXT$, X1 + SPCNG, Y1 + SPCNG
  1101.     FOR A = 0 TO Num
  1102.         SCROLLLT X1, Y1, X2, Y2, SKIP, 0   '* HERE IT IS!
  1103.     NEXT A
  1104.     GETKEY RET$
  1105.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  1106.         SETVIEW 0, 0, GETMAXX, GETMAXY
  1107.         EXIT SUB
  1108.     END IF
  1109.  
  1110.     '*************************************************************************
  1111.     '* SHOW SCROLLDN
  1112.     '*************************************************************************
  1113.     SETVIEW 0, 0, GETMAXX, GETMAXY
  1114.     A$ = "SCROLLDN (X1,Y1,X2,Y2,NumLines,FillColr)"
  1115.     DRWSTRING 1, 7, 0, A$, 10, 16
  1116.     SETVIEW X1, Y1, X2, Y2
  1117.     FILLVIEW 0
  1118.     NUMOF = GETMAXX \ 10
  1119.     FOR A = 0 TO NUMOF
  1120.         X = RND * GETMAXX
  1121.         Y = RND * GETMAXY
  1122.         I = RND * GETMAXX
  1123.         J = RND * GETMAXY
  1124.         DRWLINE 1, Colr, X, Y, I, J
  1125.         Colr = Colr + 3
  1126.         IF Colr > 255 THEN
  1127.             Colr = 16
  1128.         END IF
  1129.     NEXT A
  1130.     DRWSTRING 1, 7, 0, TEXT$, X1 + SPCNG, Y1 + SPCNG
  1131.     DRWSTRINGLT 1, 7, 0, TEXT$, X1 + SPCNG, Y1 + SPCNG
  1132.     DRWSTRINGDN 1, 7, 0, TEXT$, X1 + SPCNG, Y1 + SPCNG
  1133.     DRWSTRINGRT 1, 7, 0, TEXT$, X1 + SPCNG, Y1 + SPCNG
  1134.     FOR A = 0 TO Num
  1135.         SCROLLDN X1, Y1, X2, Y2, SKIP, 0   '* HERE IT IS!
  1136.     NEXT A
  1137.     GETKEY RET$
  1138.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  1139.         SETVIEW 0, 0, GETMAXX, GETMAXY
  1140.         EXIT SUB
  1141.     END IF
  1142.  
  1143.     '*************************************************************************
  1144.     '* SHOW SCROLLRT
  1145.     '*************************************************************************
  1146.     SETVIEW 0, 0, GETMAXX, GETMAXY
  1147.     A$ = "SCROLLRT (X1,Y1,X2,Y2,NumLines,FillColr)"
  1148.     DRWSTRING 1, 7, 0, A$, 10, 16
  1149.     SETVIEW X1, Y1, X2, Y2
  1150.     FILLVIEW 0
  1151.     NUMOF = GETMAXX \ 10
  1152.     FOR A = 0 TO NUMOF
  1153.         X = RND * GETMAXX
  1154.         Y = RND * GETMAXY
  1155.         I = RND * GETMAXX
  1156.         J = RND * GETMAXY
  1157.         DRWLINE 1, Colr, X, Y, I, J
  1158.         Colr = Colr + 3
  1159.         IF Colr > 255 THEN
  1160.             Colr = 16
  1161.         END IF
  1162.     NEXT A
  1163.     DRWSTRING 1, 7, 0, TEXT$, X1 + SPCNG, Y1 + SPCNG
  1164.     DRWSTRINGLT 1, 7, 0, TEXT$, X1 + SPCNG, Y1 + SPCNG
  1165.     DRWSTRINGDN 1, 7, 0, TEXT$, X1 + SPCNG, Y1 + SPCNG
  1166.     DRWSTRINGRT 1, 7, 0, TEXT$, X1 + SPCNG, Y1 + SPCNG
  1167.     FOR A = 0 TO Num
  1168.         SCROLLRT X1, Y1, X2, Y2, SKIP, 0   '* HERE IT IS!
  1169.     NEXT A
  1170.     GETKEY RET$
  1171.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  1172.         SETVIEW 0, 0, GETMAXX, GETMAXY
  1173.         EXIT SUB
  1174.     END IF
  1175.  
  1176.     '*************************************************************************
  1177.     '* SHOW PAGING
  1178.     '*************************************************************************
  1179.     SETVIEW 0, 0, GETMAXX, GETMAXY
  1180.  
  1181.     '*************************************************************************
  1182.     '* CHECK TO SEE IF CARD SUPPORTS CHANGING THE DISPLAY OFFSET
  1183.     '*************************************************************************
  1184.     X1 = GETMAXX + 1
  1185.     Y1 = GETMAXY + 1
  1186.     IF PAGEDISPLAY(0, 0, 0) = 0 THEN
  1187.         FILLSCREEN 0
  1188.         SOUND 100, 5
  1189.         DRWSTRING 1, 7, 0, TITLE$, 10, 0
  1190.         A$ = "Sorry, This Video Card Does Not Support"
  1191.         DRWSTRING 1, 7, 0, A$, 10, 16
  1192.         A$ = "Changing The Display Offset In This"
  1193.         DRWSTRING 1, 7, 0, A$, 10, 32
  1194.         A$ = "Video Mode...Can Not Do The Paging Demo."
  1195.         DRWSTRING 1, 7, 0, A$, 10, 48
  1196.         A$ = "Press A Key..."
  1197.         DRWSTRING 1, 15, 0, A$, 10, 64
  1198.         WHILE INKEY$ = ""
  1199.         WEND
  1200.         FILLSCREEN 0
  1201.         EXIT SUB
  1202.     END IF
  1203.  
  1204.     '*************************************************************************
  1205.     '* CHECK TO SEE IF THERE IS ENOUGH MEMORY FOR MULTIPLE PAGES
  1206.     '*************************************************************************
  1207.     NUMBANKS = WHICHMEM / 64
  1208.     XSIZE& = GETMAXX + 1
  1209.     YSIZE& = GETMAXY + 1
  1210.     BANKSPERPAGE& = XSIZE& * YSIZE& / 65536
  1211.     NUMPAGES = INT((NUMBANKS / BANKSPERPAGE&) - 1)
  1212.  
  1213.     '* LIMIT THE TOTAL NUMBER OF PAGES TO 3 (0-2) FOR THIS DEMO
  1214.     IF NUMPAGES > 2 THEN
  1215.         NUMPAGES = 2
  1216.     END IF
  1217.  
  1218.     IF NUMPAGES = 0 THEN
  1219.         FILLSCREEN 0
  1220.         SOUND 100, 5
  1221.         DRWSTRING 1, 7, 0, TITLE$, 10, 0
  1222.         A$ = "Sorry, This Video Card Does Not Have Enough Video"
  1223.         DRWSTRING 1, 7, 0, A$, 10, 16
  1224.         A$ = "Memory To Support Multiple Video Pages In This Mode."
  1225.         DRWSTRING 1, 7, 0, A$, 10, 32
  1226.         A$ = "Press A Key..."
  1227.         DRWSTRING 1, 15, 0, A$, 10, 48
  1228.         WHILE INKEY$ = ""
  1229.         WEND
  1230.         FILLSCREEN 0
  1231.         EXIT SUB
  1232.     END IF
  1233.     NUMOF = GETMAXX \ 6
  1234.     FILLSCREEN 0
  1235.     FOR Page = 0 TO NUMPAGES
  1236.         SETVIEW 0, 0, GETMAXX, GETMAXY
  1237.         DUMMY = PAGEACTIVE(Page)
  1238.         DUMMY = PAGEDISPLAY(0, 0, Page)
  1239.         FILLPAGE 0
  1240.         DRWSTRING 1, 7, 0, TITLE$, 10, 0
  1241.         A$ = "PAGEACTIVE(Page)"
  1242.         DRWSTRING 1, 7, 0, A$, 10, 16
  1243.         A$ = "PAGEDISPLAY(StartX,StartY,Page)"
  1244.         DRWSTRING 1, 7, 0, A$, 10, 32
  1245.         DRWBOX 1, 15, 0, 48, GETMAXX, GETMAXY
  1246.         A$ = "THIS IS PAGE" + STR$(Page)
  1247.         FOR I = 0 TO 20
  1248.             DRWSTRING 1, 12 + Page, 0, A$, 10, 50 + I * 16
  1249.         NEXT I
  1250.         SETVIEW 150, 58, GETMAXX - 10, GETMAXY - 10
  1251.         FOR I = 0 TO NUMOF
  1252.             X1 = RND * GETMAXX
  1253.             Y1 = RND * GETMAXY
  1254.             X2 = RND * 100
  1255.             Y2 = RND * 100
  1256.             C = RND * 15
  1257.             SELECT CASE Page
  1258.                 CASE IS = 0
  1259.                     DRWFILLCIRCLE 1, C, X1, Y1, X2
  1260.                 CASE IS = 1
  1261.                     DRWLINE 1, C, X1, Y1, X1 + X2, Y1 + Y2
  1262.                     DRWELLIPSE 1, C + 1, X1, Y1, X2 / 4, Y2 / 4
  1263.                 CASE IS = 2
  1264.                     DRWFILLBOX 1, C, X1, Y1, X1 + X2, Y1 + Y2
  1265.             END SELECT
  1266.         NEXT I
  1267.         DRWBOX 1, 15, 150, 58, GETMAXX - 10, GETMAXY - 10
  1268.         SDELAY 35
  1269.     NEXT Page
  1270.     DUMMY = PAGEACTIVE(0)
  1271.     DUMMY = PAGEDISPLAY(0, 0, 0)
  1272.  
  1273.     GETKEY RET$
  1274.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  1275.         SETVIEW 0, 0, GETMAXX, GETMAXY
  1276.         EXIT SUB
  1277.     END IF
  1278.  
  1279.     FOR I = 0 TO 1
  1280.         FOR Page = 0 TO NUMPAGES
  1281.             DUMMY = PAGEDISPLAY(0, 0, Page)
  1282.             SDELAY 35
  1283.         NEXT Page
  1284.     NEXT I
  1285.     FOR I = 0 TO 20
  1286.         FOR Page = 0 TO NUMPAGES
  1287.             DUMMY = PAGEDISPLAY(0, 0, Page)
  1288.             SDELAY 1
  1289.         NEXT Page
  1290.     NEXT I
  1291.     DUMMY = PAGEDISPLAY(0, 0, 0)
  1292.  
  1293.     GETKEY RET$
  1294.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  1295.         SETVIEW 0, 0, GETMAXX, GETMAXY
  1296.         EXIT SUB
  1297.     END IF
  1298.  
  1299.  
  1300.     END SUB
  1301.  
  1302.     SUB DOTEXT (RET$)
  1303.     DEFINT A-Z
  1304.     REM $DYNAMIC
  1305.  
  1306.     '*************************************************************************
  1307.     '* SET UP THE TITLE
  1308.     '*************************************************************************
  1309.     TITLE$ = "DEMO 6: Text functions"
  1310.     PALSET PAL, 0, 255
  1311.     
  1312.  
  1313.     '*************************************************************************
  1314.     '* SHOW DRWSTRING
  1315.     '*************************************************************************
  1316.     FILLSCREEN 0
  1317.     SETVIEW 0, 0, GETMAXX, GETMAXY
  1318.     A$ = "DRWSTRING(Mode,ForeGndColr,BackGndColr,Text$,X,Y)"
  1319.     DRWSTRING 1, 7, 0, TITLE$, 10, 0
  1320.     DRWSTRING 1, 7, 0, A$, 10, 16
  1321.     SETVIEW 0, 32, GETMAXX, GETMAXY
  1322.     Colr = 16
  1323.     A$ = "The Quick Brown Fox Jumped Over The Lazy Dog's Back! 0123456789"
  1324.     FOR Y = 32 TO GETMAXY STEP 20
  1325.         DRWSTRING 1, Colr, 0, A$, 0, Y
  1326.         Colr = Colr + 5
  1327.         IF Colr > 255 THEN
  1328.             Colr = 16
  1329.         END IF
  1330.     NEXT Y
  1331.     GETKEY RET$
  1332.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  1333.         SETVIEW 0, 0, GETMAXX, GETMAXY
  1334.         FILLSCREEN 0
  1335.         EXIT SUB
  1336.     END IF
  1337.  
  1338.     '*************************************************************************
  1339.     '* SHOW DRWSTRINGLT
  1340.     '*************************************************************************
  1341.     FILLVIEW 0
  1342.     SETVIEW 0, 0, GETMAXX, GETMAXY
  1343.     A$ = "DRWSTRINGLT(Mode,ForeGndColr,BackGndColr,Text$,X,Y)"
  1344.     DRWSTRING 1, 7, 0, A$, 10, 16
  1345.     SETVIEW 0, 32, GETMAXX, GETMAXY
  1346.     A$ = "The Quick Brown Fox Jumped Over The Lazy Dog's Back! 0123456789"
  1347.     FOR X = 0 TO GETMAXX STEP 20
  1348.         DRWSTRINGLT 1, Colr, 0, A$, X, GETMAXY
  1349.         Colr = Colr + 5
  1350.         IF Colr > 255 THEN
  1351.             Colr = 16
  1352.         END IF
  1353.     NEXT X
  1354.     GETKEY RET$
  1355.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  1356.         SETVIEW 0, 0, GETMAXX, GETMAXY
  1357.         FILLSCREEN 0
  1358.         EXIT SUB
  1359.     END IF
  1360.  
  1361.     '*************************************************************************
  1362.     '* SHOW DRWSTRINGDN
  1363.     '*************************************************************************
  1364.     FILLVIEW 0
  1365.     SETVIEW 0, 0, GETMAXX, GETMAXY
  1366.     A$ = "DRWSTRINGDN(Mode,ForeGndColr,BackGndColr,Text$,X,Y)"
  1367.     DRWSTRING 1, 7, 0, A$, 10, 16
  1368.     SETVIEW 0, 32, GETMAXX, GETMAXY
  1369.     A$ = "The Quick Brown Fox Jumped Over The Lazy Dog's Back! 0123456789"
  1370.     Colr = 16
  1371.     FOR Y = GETMAXY TO 32 STEP -20
  1372.         DRWSTRINGDN 1, Colr, 0, A$, GETMAXX, Y
  1373.         Colr = Colr + 5
  1374.         IF Colr > 255 THEN
  1375.             Colr = 16
  1376.         END IF
  1377.     NEXT Y
  1378.     GETKEY RET$
  1379.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  1380.         SETVIEW 0, 0, GETMAXX, GETMAXY
  1381.         FILLSCREEN 0
  1382.         EXIT SUB
  1383.     END IF
  1384.  
  1385.     '*************************************************************************
  1386.     '* SHOW DRWSTRINGRT
  1387.     '*************************************************************************
  1388.     FILLVIEW 0
  1389.     SETVIEW 0, 0, GETMAXX, GETMAXY
  1390.     A$ = "DRWSTRINGRT(Mode,ForeGndColr,BackGndColr,Text$,X,Y)"
  1391.     DRWSTRING 1, 7, 0, A$, 10, 16
  1392.     SETVIEW 0, 32, GETMAXX, GETMAXY
  1393.     A$ = "The Quick Brown Fox Jumped Over The Lazy Dog's Back! 0123456789"
  1394.     FOR X = GETMAXX TO 0 STEP -20
  1395.         DRWSTRINGRT 1, Colr, 0, A$, X, 32
  1396.         Colr = Colr + 5
  1397.         IF Colr > 255 THEN
  1398.             Colr = 16
  1399.         END IF
  1400.     NEXT X
  1401.     GETKEY RET$
  1402.     IF (RET$ = "S") OR (RET$ = "Q") THEN
  1403.         SETVIEW 0, 0, GETMAXX, GETMAXY
  1404.         FILLSCREEN 0
  1405.         EXIT SUB
  1406.     END IF
  1407.  
  1408.     END SUB
  1409.